package initialize

import (
	"fmt"
	"os"
	"path/filepath"

	"github.com/pelletier/go-toml/v2"
	"gorm.io/gorm"
)

// KUBE_ADMIN_CONFIG = /Users/yuelong/CodeHome/CompleteProject/kube-proxy-admin/kube-server/data.sqlite

var (
	DB *gorm.DB
	// Config 配置项
	Config AppConfig
	// readFile 获取配置文件位置
	readFile = func() string {

		var (
			filePath     string
			fallbackPath string
		)

		// 1. 优先从环境变量获取路径
		filePath = os.Getenv("KUBE_ADMIN_CONFIG")
		if filePath != "" {
			if _, err := os.Stat(filePath); err == nil {
				return filePath // 环境变量路径有效
			}
			fmt.Printf("环境变量 KUBE_ADMIN_CONFIG 指向的文件不存在: %s\n", filePath)
		}

		// 2. 获取用户主目录
		currentDir, _ := os.Getwd()
		fallbackPath = filepath.Join(currentDir, "data.sqlite")
		if _, err := os.Stat(fallbackPath); err == nil {
			return fallbackPath
		}

		// 3. 最终兜底逻辑
		panic(fmt.Sprintf("配置文件不存在，已尝试以下路径:\n- 环境变量: %s\n- 当前目录: %s\n", filePath, fallbackPath))

	}
)

type (
	ServerConfig struct {
		Port        int    `toml:"port"`
		Model       string `toml:"model"`
		ContextPath string `toml:"context-path"`
	}

	LoggerConfig struct {
		Level      string `toml:"level"`
		Filename   string `toml:"filename"`
		MaxSize    int    `toml:"max-size"`
		MaxBackups int    `toml:"max-backups"`
		MaxAge     int    `toml:"max-age"`
	}

	DBConfig struct {
		DBType    string `toml:"db-type"`
		InitTable bool   `toml:"init-table"`
		DbPath    string `toml:"db-path"`
	}

	AuthConfig struct {
		DefaultHeader string `toml:"default-header"`
		Username      string `toml:"username"`
		Password      string `toml:"password"`
	}

	AppConfig struct {
		Server ServerConfig `toml:"server"`
		Logger LoggerConfig `toml:"logger"`
		DB     DBConfig     `toml:"db"`
		Auth   AuthConfig   `toml:"auth"`
	}
)

func initConfig() {
	var (
		file []byte
		err  error
	)

	if file, err = os.ReadFile("config.toml"); err != nil {
		panic("读取配置文件异常" + err.Error())
	}

	if err = toml.Unmarshal(file, &Config); err != nil {
		panic("解析配置文件异常" + err.Error())
	}
}

// initConfig 初始化配置
//func initConfig() {
//
//	var (
//		dbFilePath = readFile()
//		configs    []entity.SystemConfig
//		err        error
//	)
//
//	if DB, err = gorm.Open(sqlite.Open(dbFilePath), &gorm.Config{
//		NamingStrategy: schema.NamingStrategy{
//			SingularTable: true,
//		},
//		Logger: logger.Default.LogMode(logger.Info),
//	}); err != nil {
//		panic("获取系统数据异常: " + err.Error())
//	}
//
//	// 读取系统配置表
//	if err = DB.Model(&entity.SystemConfig{}).
//		Where("config_status = ?", 1).
//		Find(&configs).
//		Error; err != nil {
//		panic("获取系统数据异常: " + err.Error())
//	}
//
//	if len(configs) == 0 {
//		panic("获取系统数据为空")
//	}
//
//	ConfigMap = make(map[string]string)
//
//	for _, config := range configs {
//		ConfigMap[config.ConfigKey] = config.ConfigValue
//	}
//
//}
